/* 
 * Autores:
 *      Jonathan Lopez  11106
 *      Jorge Martínez  11237
 * 
 * Ultima revision: $Rev: 24 $
 *      Fecha: $Date: 2011-11-12 04:09:13 +0000 (Sat, 12 Nov 2011) $
 * 
 * Archivo: iEnlace.java
 */

package Servicios;

import java.util.ArrayList;

/**
 * Permite la lectura y escritura de campos relacionados a un servicio en
 * particular.
 * 
 * @author Jorge
 * @author Jonathan
 */
public interface iEnlace {
    /**
     * Agrega un nuevo campo al Servicio que se esta utilizando. La cardinalidad
     * indica el orden en que se disponen los datos en el registro.
     * @param nombreCampo Nombre del campo nuevo, el cual no debe de estar
     * repetido.
     * @param cardinalidad Orden en que aparece el campo. Un valor de cero,
     * negativo o mayor al numero mas grande dispone al nuevo campo en la
     * ultima posicion. Cualquier otro valor posiciona al campo en dicha 
     * posicion y mueve a todos los demas hacia abajo.
     * @return True si la operacion fue exitosa, y false en caso contrario.
     */
    public boolean agregarCampo( String nombreCampo, int cardinalidad );
    
    /**
     * Cambia el valor de un campo.
     * @param nombreCampo Nombre del campo al cual se le quiere cambiar su valor.
     * @param valorCampo Nuevo valor para el campo. Si se especifica null
     * entonces el campo se elimina.
     * @return True si la operacion fue exitosa, false en caso contrario.
     */
    public boolean cambiarCampo( String nombreCampo, String valorCampo );
    
    /**
     * Cambia unicamente la cardinalidad de un campo.
     * @param nombreCampo Nombre del campo al cual se le quiere cambiar la
     * cardinalidad.
     * @param cardinalidad Orden en que aparece el campo. Un valor de cero,
     * negativo o mayor al numero mas grande dispone al nuevo campo en la
     * ultima posicion. Cualquier otro valor posiciona al campo en dicha 
     * posicion y mueve a todos los demas hacia abajo.
     * @return True si la operacion fue exitosa, false en caso contrario.
     */
    public boolean cambiarCardinalidadCampo( String nombreCampo, int cardinalidad );
    
    /**
     * Devuelve el valor asociado con el campo dado.
     * @param nombreCampo Nombre del campo que se desea su valor.
     * @return Regresa el valor asociado al campo, o null si el campo no existe.
     */
    public String obtenerCampo( String nombreCampo );
    
    /**
     * @return Devuelve un arreglo con los nombres de todos los campos del
     * Servicio.
     */
    public String[] obtenerNombreCampos();
    
    /**
     * Si se modifican los datos del iEnlace entonces esta función aplica y
     * guarda los cambios en la fuente de los mismos.
     * @return True si la operacion fue exitosa, false en caso contrario.
     */
    public boolean realizarCambios();
    
    /**
     * @return Regresa el nombre de la categoria que representa este enlace.
     */
    public String obtenerCategoria();
    
    /**
     * @return Regresa el nombre del servicio que representa este enlace.
     */
    public String obtenerNombreServicio();
}
